package cn.wolfcode.luowowo.advice;

import cn.wolfcode.luowowo.exception.LogicException;
import cn.wolfcode.luowowo.util.JsonResult;
import org.springframework.stereotype.Repository;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletResponse;
/**
 * 通过动态代理方式 对Controller中请求方法异常统一处理
 *
 * @ControllerAdvice: Controller类的功能增强标签
 *
 * 在请求方法处理前,可以对请求方法进行功能增强:参数改造-data类型数据格式化
 * 在请求方法处理后,可以对请求方法进行功能增强:请求方法统一异常处理
 */
@ControllerAdvice
public class CommonExceptionHandler {

    //下面方法的写法 给 请求映射规则一样

    //明确指定该方法 可以处理哪一种异常
    @ExceptionHandler(LogicException.class)
    @ResponseBody
    public Object disposeExcption(LogicException e, Model model, HttpServletResponse response) {
        e.printStackTrace();
        return JsonResult.error(JsonResult.CODE_ERROR_PARAM, e.getMessage(), null);
    }

    @ExceptionHandler(RuntimeException.class)
    @ResponseBody
    public Object disposeRunTimeExcption(Exception e, Model model, HttpServletResponse response) {
        e.printStackTrace();
        return JsonResult.defaultError();
    }
}
